【Python】Python可变参数*args **kwargs

您所在的位置:网站首页 python names函数 【Python】Python可变参数*args **kwargs

【Python】Python可变参数*args **kwargs

2023-05-17 20:30| 来源: 网络整理| 查看: 265

可变参数*args 和 **kwargs 要点 作为函数定义时:收集未匹配参数组成tuple或dict对象

*参数也就是*args收集所有未匹配的位置参数组成一个tuple对象,局部变量args指向此tuple对象 **参数也就是**kwargs收集所有未匹配的关键字参数组成一个dict对象,局部变量kwargs指向此dict对象

def temp(*args,**kwargs): pass 作为函数调用时:解包功能

*参数用于解包tuple对象的每个元素,作为一个一个的位置参数传入到函数中

my_tuple = ("w","y","z") temp(*my_tuple) #---等同于---# temp("w","y","z")

**参数用于解包dict对象的每个元素,作为一个一个的关键字参数传入到函数中

my_dict = {"name":"wangyuanwai","age":32} temp(**my_dict) #----等同于----# temp(name="wangyuanwai",age=32)

定义函数时候,参数*args在前,**kwargs在后,*args和**kwargs组合起来可以传入任意的参数。

Python函数 — 位置参数和关键字参数

*args例子 *args作为参数 定义函数 收集所有未匹配的参数,封存在一个list里 def print_str(first, *second): print(first) print(second) # 定义一个函数,*second作为不定参数

此时我们只传入一个参数

print_str("hello")

输出会是

hello ()

传入的第一个字符串参数"hello"打印出来了,没有传入参数的*second则打印的是一个tuple对象的字符串表示形式,即一个括号"()" 。 注意:()表示含有0个元素的tuple对象!

函数调用时的 *args 进行解包

调用print_str()函数时,直接传入一个 *参数会发生什么?

def print_str(first, *second): print(first) print(second) numbers_strings = ("1","2","3","4","5") print_str(*numbers_strings)

输出结果为:

1 ('2', '3', '4', '5')

*numbers_strings出现在函数调用时,称为解包(一个“*”字符后面紧挨着1个tuple对象),numbers_strings自身是一个tuple对象,所以也称为元组的解包,tuple中的元素解包成一个一个的位置参数传入到函数中,所以才有下面两个语句的相等性!

**kwargs例子 函数定义中,参数名称前有两个** 收集所有未匹配的参数,封存在一个字典里

在这里插入图片描述 定义一个函数,这里用到了*args 和 **kwargs

def printStr(first,second,*args,**kwargs): print(first) print(second) print(args) print(kwargs)

然后进行函数的调用,

printStr('first','second','third','fourth',fifth = '5')

输出结果为:

first second ('third', 'fourth') {'fifth': '5'}

kwargs字典收集了{‘fifth’: ‘5’}这个键值对。当然,在写函数的时候,如果需要取得这个’fifth’: ‘5’,使用字典的get()方法比较好。 在这里插入图片描述

函数调用时,传入的关键字参数有匹配的位置参数时,则位置参数优先使用(匹配)这些关键字参数,剩余所有未使用(未匹配)的关键字参数会在函数内组装进一个dict对象中,组装后dict对象会赋值给变量名anything,此时局部变量anything指向一个dict对象

注意:**参数只收集未匹配的关键字参数

函数调用时使用字典解包功能(dict对象前加**) def printStr(first, **dict): print(str(first) + "\n") print(dict)

传入一个字典,用**进行解包

printDic = {"name": "tyson", "age":"99"} printStr(100, **printDic)

相当于

printDic = {"name": "tyson", "age":"99"} printStr(100, name = "tyson", age = "99")

又一个例子

my_dict = {"name":"wang","age":32} temp(**my_dict) #----等同于----# temp(name="wang",age=32)


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3